package org.bbs.demo.user.api;

import org.bbs.demo.advice.BusinessException;
import org.bbs.demo.advice.SysException;
import org.bbs.demo.common.BBSConstants;
import org.bbs.demo.common.Result;
import org.bbs.demo.user.dao.UserUpdateDao;
import org.bbs.demo.user.dto.UserUpdatePwdDto;
import org.bbs.demo.user.dto.UserUpdateInfoDto;
import org.bbs.demo.utils.jwtutil.JWTutil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/user/update")
public class UserUpdateApi {

    @Autowired
    private UserUpdateDao userUpdateDao;

    // 修改用户个人信息
    @PostMapping("/info")
    public Result updateInfo(@Validated @RequestBody UserUpdateInfoDto userUpdateInfoDto, @RequestHeader(BBSConstants.HEADER_PARAM_TOKEN) String token) {

        // 输入数据检查
        if (!userUpdateInfoDto.getSex().equals("男") && !userUpdateInfoDto.getSex().equals("女")) {
            throw new BusinessException("性别请输入 男or女");
        }


        userUpdateInfoDto.setUser_id(JWTutil.getUserID(token));
        int updateFlag = 0;

        try {
            updateFlag = userUpdateDao.updateUserInfo(userUpdateInfoDto);
        } catch (Exception e) {
            throw new SysException("数据库update失败");
        }
        if (updateFlag == 1) {
            return Result.OK("用户信息更改成功");
        } else {
            throw new BusinessException("用户信息更改失败");
        }
    }

    // 修改用户密码
    @PostMapping("/password")
    public Result updatePwd(@Validated @RequestBody UserUpdatePwdDto userUpdatePwdDto, @RequestHeader(BBSConstants.HEADER_PARAM_TOKEN) String token) {

        userUpdatePwdDto.setUser_id(JWTutil.getUserID(token));

        int updateFlag = 0;
        try {
            updateFlag = userUpdateDao.updateUserPwd(userUpdatePwdDto);
        } catch (Exception e) {
            throw new SysException("数据库update失败");
        }

        if (updateFlag == 1) {
            return Result.OK("密码更改成功");
        } else {
            throw new BusinessException("密码更改失败");
        }
    }
}
